package com.example.pm.ending.server.service;

import com.example.pm.ending.server.module.owner.AddNewOwnerModuleDTO;
import com.example.pm.ending.server.module.owner.OwnerListModuleVO;
import com.example.pm.ending.server.module.owner.OwnerStandardModuleVO;
import com.example.pm.ending.server.module.owner.OwnerUpdateModuleDTO;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

/**
 * 处理房产模块的业务模块
 * @author 闫鑫飞
 */
@Transactional
public interface IOwnerModuleService {

    /**
     * 业主启用状态说明
     * 0禁用  1启用
     */
    public static final String[] OWNER_ENABLE_STATE = {"禁用","启用"};

    /**
     * 业主身份证出生日期截取起始
     */
    public static final Integer OWNER_BIRTH_YEAR_FIRST = 6;
    /**
     * 业主身份证出生日期截取结尾
     */
    public static final Integer OWNER_BIRTH_YEAR_END = 10;
    /**
     * 业主用户名起始
     */
    public static final String OWNER_USERNAME_FIR = "YZ";

    /**
     * 从后截取的位数
     */
    public static final int SUBSTRING_LAST_INDEX = 4;
    /**
     * 启用
     */
    public static final Integer ENABLE_STATE = 1;
    /**
     * 房屋状态为 已售
     */
    public static final Integer HOUSE_STATE_SOLD = 2;
    /**
     * 房屋状态为 空闲
     */
    public static final Integer HOUSE_STATE_IDLE = 1;

    /**
     * 房屋不需要服务
     */
    public static final Integer HOUSE_CODE_NO = 0;

    /**
     * 房屋需要服务
     */
    public static final Integer HOUSE_CODE_YES = 1;
    /**
     * 业主角色id
     */
    public static final Long OWNER_ROLE_ID = 2L;





    /**
     * 添加业主
     * @param dto 客户端输入业主信息
     *
     */
    void addNewOwner(AddNewOwnerModuleDTO dto);

    /**
     * 获取业主列表
     * @return 业主列表
     */
    List<OwnerListModuleVO> getOwnerModuleList();

    /**
     * 根据 业主id,房间id,以及车位编号 查询业主
     * @param ownerId 业主id
     * @param houseId 房间id
     * @param carPortNumber 车位编号
     * @return  业主模块个人信息
     */
    OwnerStandardModuleVO getOwnerModuleStandardById(Long ownerId,Long houseId,String carPortNumber);

    /**
     * 删除业主
     */
    void deleteOwnerById(Long id);

    /**
     * 启用业主
     */
    void ownerEnable(Long ownerId);

    /**
     * 禁用业主
     */
    void ownerDisEnable(Long ownerId);

    /**
     * 修改业主信息
     * @param ownerUpdateModuleDTO 修改后的业主信息其中包含以下
     *  beforeUpdateHouseId 修改前的业主的房产id
     *  beforeUpdateCarPartAreaId 修改前业主的车库区号
     *  beforeUpdateCarPortNumber 修改前的业主的车库编号
     */
    void updateOwnerInfo(OwnerUpdateModuleDTO ownerUpdateModuleDTO);
}
